'use strict'

const http=require("http");


let html=`
        <!DOCTYPE html>
            <html>
                <head>
                    <title>First Sever</title>
                </head>
                <body>
                    <div>Node.js in service.</div>
                </body>
            </html>
        `

let routerTable={
    '/':async(request,response)=>{
        response.setHeader('content-type','text/html; charset=utf-8')
        response.end(html)
    },
    '/x/y':async(request,response)=>{
        response.end('--ok--')
    },
    '/x/y/z':async(request,response)=>{
        //! 计算buffer总长度
        let bufferList=[];
        let totalLength=0;

        request.on('data',chunk=>{
            totalLength+=chunk.length
            bufferList.push(chunk)
        })
        let bodyData=null;

        //! data获取完之后，触发事件
        request.on('end',()=>{
            if(bufferList.length>0){
                    //! 将buffer小片段拼接起来     如果没有提供 totalLength ，
                    //! 它将计算 list 中的 Buffer（以获得该值）。然而，这增加了额外的函数循环，提供精准的长度将加速计算。
                bodyData=Buffer.concat(bufferList,totalLength);
            }
            bufferList=[];//! 清空bufferList数组，释放内存

            //! 当接收完数据后，才能判断数据
            if(bodyData){
                response.setHeader('content-type','text/plain; charset=utf-8')
                response.end(bodyData)
            }else{
                response.setHeader('content-type','text/html; charset=utf-8')
                response.end()
            }
        })
    }
}

// let serv=http.createServer((request,response)=>{
let serv=http.createServer()
serv.on('request',(request,response)=>{
    //path+quertstring给了url，没有将前面的域名之类的给url
        if(routerTable[request.url]===undefined){
            response.statusCode=404;
            response.end('page not found')
            return 
        }

        //! 函数的调用             传的参
        routerTable[request.url](request,response)
})

serv.listen(3456)